<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 构造函数通过new 关键词 创建的对象 => 实例化对象
    // 函数封装:
    // 优点: 可以根据传入的参数快速创建对象
    // 缺点:
    // (1) 通过函数cat创建的对象和函数没有任何关系(不是构造函数)
    // var arr = new Array([1, 2, 3])
    // console.log(arr instanceof Array)
    // var obj = {} // {} -> new Object()  []-> new Array()
    // console.log(obj instanceof Object)
    // var p = new Promise(function () { })
    // console.log(p instanceof Promise)
    //     (2) 公有的属性和方法 重复创建 占内存
    // function cat(name, color) {
    //     var obj = { // new Object()
    //         name: name,
    //         color: color,
    //         species: "Cat",
    //         call: function () {
    //             console.log("喵喵")
    //         },
    //         skill() {
    //             console.log("捉老鼠")
    //         }
    //     }
    //     return obj
    // }

    // var Tom = cat("Tom", "black")
    // console.log(Tom, Tom instanceof cat, Tom instanceof Object) //Tom 是object创建的，不是函数cat
    // var Kitty = cat("Kitty", "pink")
    // console.log(Kitty)
    // var LanMao = cat("LanMao", "blue")
    // console.log(LanMao)



    // new String()
    // new Number()
    // new Boolean()

    // 作为普通函数调用(直接调用)
    // console.log(String(100))  // "100"
    // console.log(Number("100"))  // 100
    // console.log(Boolean(100))  // true

    // 总结: 构造函数也是一个函数  1. 作为普通函数调用   2.作为构造函数调用 => 实例化对象
</script>



</html>